home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / COMP / MM2COMP2.D < prev    next >
Encoding:
Modula Definition  |  1990-11-10  |  3.1 KB  |  125 lines

  1. DEFINITION MODULE MM2Comp2;
  2.  
  3. FROM SYSTEM IMPORT CompilerVersion;
  4.  
  5. CONST
  6.  
  7.     (* Konfigurations-Konstanten *)
  8.     (* ------------------------- *)
  9.  
  10.       OldByteOrder = FALSE;   (* TRUE: Vars können auf ungeraden Adr. liegen *)
  11.       BITSETfromSYSTEM = FALSE;
  12.  
  13.     (* ------------------------- *)
  14.  
  15.  
  16. CONST
  17.   D0 = 0;   D1 = 1;   D2 = 2;   D3 = 3;   D7 = 7;
  18.   A0 = 8;   A1 = 9;   A2 = 10;  A3 = 11;  A4 = 12;  A5 = 13;  A6 = 14;  A7 = 15;
  19.   F0 = 16;  F2 = 18;  F3 = 19;  F7 = 23;
  20.  
  21. TYPE
  22.  
  23.   RegType  = [D0..F7];
  24.   RegSet   = SET OF RegType;
  25.  
  26.   VarType  = (dataVar, ptrVar, floatVar);
  27.  
  28. CONST
  29.   dataRegs  = RegSet{D0..D2};
  30.   addrRegs  = RegSet{A0..A2};
  31.   floatRegs = RegSet{F0..F2};
  32.   tempRegs  = RegSet{D0..D2,A0..A2,F0..F2};
  33.   varRegs   = RegSet{D3..D7,A3..A7,F3..F7};
  34.   anyDataReg = RegSet{D0..D7};
  35.   anyAddrReg = RegSet{A0..A7};
  36.   anyReg     = RegSet{D0..A7};
  37.  
  38. VAR freeRegs: RegSet;           (* z.Zt. belegte Regs *)
  39.     filler1: CHAR;
  40. VAR freeVarRegs:  RegSet;       (* proc-weit belegte Regs f. Reg-Vars *)
  41.     filler2: CHAR;
  42.  
  43. PROCEDURE exclFromFreeRegs;
  44. PROCEDURE inclInFreeRegs;
  45.  
  46. VAR
  47.   InConstExpr: BOOLEAN;  (* TRUE -> no code is allowed (Constant expr.) *)
  48.   SuppressCode: BOOLEAN; (* TRUE -> don't generate code (SIZE, IF TRUE OR...) *)
  49.   RelocCount: LONGCARD;  (* wird bei jeder zu reloz. Adr. erhöht *)
  50.  
  51. PROCEDURE expr;         (* Erg. auf A3-Stack *)
  52.  
  53. PROCEDURE constExpr;
  54.   (* liefert nie ZZ, sondern reduzierten Wert *)
  55.  
  56. PROCEDURE constExprZZ;
  57.   (* liefert auch ZZ *)
  58.  
  59. PROCEDURE boolExpr;
  60.   (*
  61.    * Legt alle Forward-Refs für FALSE auf den Integer-Stack.
  62.    * Deren Anzahl wird in D0.W geliefert.
  63.    * Wenn Anzahl Null, dann ist BOOLEAN-Expr = TRUE und alle
  64.    * weiteren ELSE-Zweige sind FALSE.
  65.    * Wenn stattdessen SuppressCode = TRUE, dann ist Expr = FALSE
  66.    * und Code-Erz. muß zum nächsten ELSE/END wieder aktiviert werden.
  67.    *)
  68.  
  69. PROCEDURE caseExpr; (* Erg. nach D0, Fehler, wenn nicht scalar *)
  70.  
  71. PROCEDURE pushExpr;
  72.   (*
  73.    * wertet Expr aus, legt sie auf den A3-Stack (D0 = 0) oder nach D0
  74.    * (D0 = 1).
  75.    * Dabei wird auf dem Integer-Stack der Ziel-Typ übergeben, auf den
  76.    * geprüft und ggf. angepaßt wird.
  77.    *)
  78.  
  79. PROCEDURE pushAdr;
  80.   (*
  81.    * wertet einen designator aus und legt seine Adr. auf den A3-Stack.
  82.    * Sein Typ wird auf dem Integer-Stack zurückgegeben
  83.    *)
  84.  
  85. PROCEDURE assign;
  86.  
  87. PROCEDURE adjustSubrange;
  88.  (* von SetType (SYMBOL.ICL) aufgerufen *)
  89.  
  90. PROCEDURE aExcl;
  91. PROCEDURE aIncl;
  92.  
  93. PROCEDURE aInc;
  94. PROCEDURE aDec;
  95.  
  96. PROCEDURE aCallSys;
  97. PROCEDURE aCallExt;
  98.  
  99. PROCEDURE aLoad;
  100. PROCEDURE aStore;
  101.  
  102. PROCEDURE aFor;
  103.  
  104. PROCEDURE aWith;
  105.  
  106. PROCEDURE initBlock;
  107.   (* Beginn des Blocks - hier werden die freien Regs initialisiert *)
  108.  
  109. PROCEDURE aBegin;
  110. PROCEDURE aEnd;
  111.   (* zeigen BEGIN und END eines Blocks an. Keine Schachtelung möglich. *)
  112.  
  113. PROCEDURE saveVarRegs;
  114. PROCEDURE restoreVarRegs;
  115.   (* In D0 wird Reg-List übergeben *)
  116.  
  117. PROCEDURE getRegVar;
  118.   (* In: D0.W: gewünschten Typ (Data/Addr/Float)
  119.    * Out: D0.W: neg. -> kein Reg frei, sonst Reg-Nr und Flags *)
  120.  
  121. PROCEDURE discardA7;
  122.   (* In: D0.L: A7Offset, auf den abgebaut werden soll *)
  123.  
  124. END MM2Comp2.
  125.